#include <cmath>
#include <iostream>

#include "impl.h"

/* ***********************************************
 *
 *
 *                   WangDao
 *
 *             select the index of
 *                  question.
 *
 *
 *
 * ***********************************************/
// #include "2.2/2.4.h"
// #include "2.2/2.7.h"
// #include "2.2/2.8.h"
// #include "2.2/2.9.h"
// #include "2.2/2.10.h"
// #include "2.2/2.11.h"
// #include "2.2/2.12.h"
// #include "2.2/2.13.h"
// #include "2.2/2.14.h"

// #include "2.3/2.1.h"
// #include "2.3/2.2.h"
// #include "2.3/2.3.h"
// #include "2.3/2.4.h"
// #include "2.3/2.5.h"
// #include "2.3/2.6.h"
//#include "2.3/2.7.h"
//#include "2.3/2.8.h"
// #include "2.3/2.9.h"
// #include "2.3/2.10.h"
// #include "2.3/2.11.h"
// #include "2.3/2.12.h"
// #include "2.3/2.13.h"
// #include "2.3/2.14.h"
// #include "2.3/2.15.h";
// #include "2.3/2.16.h"
// #include "2.3/2.17.h"
// #include "2.3/2.18.h"
// #include "2.3/2.19.h"
// #include "2.3/2.20.h"
// #include "2.3/2.21.h"
// #include "2.3/2.23.h"
// #include "2.3/2.24.h"
// #include "5.3/construct_tree_from_NLR_and_LNR.h"
// #include "5.3/LRN_iter_no_recurse.h"
// #include "5.3/LRN_iter_no_recurse_until_found.h"
// #include "5.3/LRN_iter_no_recurse_found_closest_father_of_AB.h"
// #include "5.3/construct_full_tree_from_NLR.h"
#include "5.3/construct_leaf_list_LR.h"
// #include "my/lcs.h"

//#include "my/quick_sort.h"
// #include "my/test.h"
// int main()
// {

//     // // Basic Example of cpp
//     // std::cout << "Example of cpp \n";
//     // float a = 1.0, b = 2.0;
//     // std::cout << a << std::endl;
//     // std::cout << a / b << std::endl;
//     // std::cout << std::sqrt(b) << std::endl;
//     // std::cout << std::acos(-1) << std::endl;
//     // std::cout << std::sin(30.0 / 180.0 * acos(-1)) << std::endl;

//     // // Example of vector
//     // std::cout << "Example of vector \n";
//     // // vector definition
//     // Eigen::Vector3f v(1.0f, 2.0f, 3.0f);
//     // Eigen::Vector3f w(1.0f, 0.0f, 0.0f);
//     // // vector output
//     // std::cout << "Example of output \n";
//     // std::cout << v << std::endl;
//     // // vector add
//     // std::cout << "Example of add \n";
//     // std::cout << v + w << std::endl;
//     // // vector scalar multiply
//     // std::cout << "Example of scalar multiply \n";
//     // std::cout << v * 3.0f << std::endl;
//     // std::cout << 2.0f * v << std::endl;

//     // // Example of matrix
//     // std::cout << "Example of matrix \n";
//     // // matrix definition
//     // Eigen::Matrix3f i, j;
//     // i << 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0;
//     // j << 2.0, 3.0, 1.0, 4.0, 6.0, 5.0, 9.0, 7.0, 8.0;
//     // // matrix output
//     // std::cout << "Example of output \n";
//     // std::cout << i << std::endl;
//     // // matrix add i + j
//     // // matrix scalar multiply i * 2.0
//     // // matrix multiply i * j
//     // // matrix multiply vector i * v
//     auto angle = 45.0;
//     auto x = 1;
//     auto y = 2;
//     auto trans = get_rotate_trans_2d(angle, x, y);
//     Eigen::Vector3f point;
//     point << 2, 1, 1;
//     std::cout << point << "\r\nafter rotated " << angle
//               << " and translate " << x << "," << y
//               << std::endl;
//     std::cout << trans * point << std::endl;

//     return 0;
// }